<?php

class Panier {

    private static function modifierQteProduit($leProduit, $quantite)
    {
        $_SESSION['quantites'][$leProduit->id] += $quantite;
    }

    public static function initialiser() {
        if (!isset($_SESSION['produits'])) {
            $_SESSION['produits'] = array();
            $_SESSION['quantites'] = array();
        }
    }

    public static function ajouterProduit($leProduit,$quantite) {
        /* @var $leProduit Produit */
        $search = array_search($leProduit, $_SESSION['produits']);
        if($search === false) {
            $_SESSION['produits'][] = $leProduit;
            $_SESSION['quantites'][$leProduit->id] = $quantite;
        }
        else{
            self::modifierQteProduit($leProduit, $quantite);
        }
    }

    public static function retirerProduit($idProduit) {
        $lesProduits = self::getProduits();
        $nouveauPanier = array();
        foreach ($lesProduits as $unProduit) {
            if ($unProduit->id != $idProduit)
            {
                $nouveauPanier[] = $unProduit;
            }
        }
        $_SESSION['produits'] = $nouveauPanier;
        unset($_SESSION['quantites'][$idProduit]);
    }

    public static function getQteProduit($leProduit){
        return $_SESSION['quantites'][$leProduit->id];
    }

    public static function nbProduits() {
        $nb = 0;
        if (isset($_SESSION['quantites'])) {
            $nb = array_sum($_SESSION['quantites']);
        }
        return $nb;
        // ou en 1 ligne :
        //return isset($_SESSION['produits'])?count($_SESSION['produits']):0;
    }

    public static function vider() {
        $_SESSION['produits'] = array();
        $_SESSION['quantites'] = array();
    }

    public static function detruire() {
        unset($_SESSION['produits']);
    }

    public static function estVide() {
        return (self::nbProduits() == 0);
    }

    public static function contient($leProduit) {
//        $lesProduits = self::getProduits();
//
//        foreach ($lesProduits as $unProduit) {
//            if ($unProduit == $leProduit) {
//                return true;
//            }
//        }
//        return false;
        return in_array($leProduit, self::getProduits());
    }

    public static function getProduits() {
        return $_SESSION['produits'];
    }

    /**
     * @param Produit $leProduit
     * @return int
     */
    public static function totalPrix(Produit $leProduit = null)
    {
        if($leProduit !== null)
        {
            return $leProduit->prix * self::getQteProduit($leProduit);
        }
        else
        {
            $total = 0;
            foreach(self::getProduits() as $unProduit)/* @var $unProduit Produit */
            {
                $total += $unProduit->prix * self::getQteProduit($unProduit);
            }
            return $total;
        }
    }
} 